package com.eight.paper.admin.service;

import com.alibaba.fastjson2.JSONObject;
import com.eight.paper.admin.domain.ExamPaper;
import com.eight.paper.admin.domain.ExamPaperExaminee;
import com.eight.paper.admin.domain.model.ExamPaperBody;
import com.eight.paper.admin.domain.model.ExamPaperReponseBody;
import com.eight.paper.admin.domain.model.MonitorResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

/**
 * 考试试卷Service接口
 * 
 * @author eight
 * @date 2023-10-31
 */
public interface IExamPaperService 
{
    /**
     * 查询考试试卷
     * 
     * @param id 考试试卷主键
     * @return 考试试卷
     */
    public ExamPaper selectExamPaperById(Integer id);

    /**
     * 查询考试试卷列表
     * 
     * @param examPaper 考试试卷
     * @return 考试试卷集合
     */
    public List<ExamPaper> selectExamPaperList(ExamPaper examPaper);

    /**
     * 修改考试试卷
     * 
     * @param examPaper 考试试卷
     * @return 结果
     */
    public int updateExamPaper(ExamPaper examPaper);

    /**
     * 批量删除考试试卷
     * 
     * @param ids 需要删除的考试试卷主键集合
     * @return 结果
     */
    public int deleteExamPaperByIds(Integer[] ids);

    /**
     * 删除考试试卷信息
     * 
     * @param id 考试试卷主键
     * @return 结果
     */
    public int deleteExamPaperById(Integer id);

    /**
     * 创建考试试卷
     *
     * @param examPaperBody 考试试卷
     * @return 结果
     */
    void createExamPaper(ExamPaperBody examPaperBody);
    /**
     * 修改考试试卷
     *
     * @param examPaperBody 考试试卷
     * @return 结果
     */
    void updatePaper(ExamPaperBody examPaperBody);

    /**
     * 根据tupe获取是否带答案的试卷
     * @param id
     * @param type
     * @return
     */
    ExamPaperReponseBody selectExamPaperById(Integer id, String type);

    /**
     * 提交试卷
     * @param paperId 试卷id
     * @param paper 答题信息
     */
    void submitPaper(Integer paperId, JSONObject paper);

    /**
     * 暂存试卷
     * @param paperId
     * @param paper
     */
    void tempPaper(Integer paperId, JSONObject paper);

    /**
     * 暂存考生批卷信息
     * @param paperId
     * @param examineeId
     * @param paper
     */
    void tempMark(Integer paperId, Integer examineeId, JSONObject paper);

    /**
     * 提交阅卷
     * @param paperId
     * @param examineeId
     * @param paper
     */
    void submitMark(Integer paperId, Integer examineeId, JSONObject paper,Integer userId);

    /**
     * 查询单个考生试卷列表
     *
     * @param examPaper 考试试卷
     * @return 考试试卷集合
     */
    List<ExamPaperBody> selectExamineePaperList(ExamPaper examPaper);

    /**
     * 查询单个阅卷老师试卷列表
     *
     * @param examPaper 考试试卷
     * @return 考试试卷集合
     */
    List<ExamPaper> selectMarkPaperList(ExamPaper examPaper);

    /**
     * 动态获取试题
     * @param examPaperBody
     * @param type 是否显示答案，1是0否
     * @return
     */
    ExamPaperReponseBody getQuestions(ExamPaperBody examPaperBody,String type);

    /**
     * 初始化考生答卷总表信息，如果已存在答卷明细则清空
     * @param paperId
     * @param userId
     * @param nowDate
     * @return
     */
    ExamPaperExaminee initExamPaperExaminee(Integer paperId, Integer userId, Date nowDate, String questionOrder);

    /**
     * 导出对应试卷所有考生考试列表
     * @param id
     * @param uuid
     */
    void exportPapersById(Integer id, String uuid);

    /**
     * 导出对应试卷所有考生考试进度监测
     * @param uuid
     * @return
     */
    MonitorResult exportMonitor(String uuid);

    /**
     * 下载导出文件
     * @param response
     * @param uuid
     */
    void downLoadExport(HttpServletResponse response, String uuid);

    /**
     * 从数据库获取考试答卷信息
     * @param id
     * @param userId
     * @return
     */
    ExamPaperReponseBody selectExamPaperByIdAndUserId(Integer id, Long userId);

    /**
     * 复制试卷
     * @param id
     */
    void copyPaper(Integer id);

    /**
     * 加载考生到redis阅卷列表
     * @param paperId
     */
    void loadExamineeMarkQueue(Integer paperId);

    /**
     * 人脸识别
     * @param file
     * @param paperId
     * @return
     */
    boolean face(MultipartFile file, Integer paperId,String imageType);
}
